package initialize

import (
	"go.uber.org/zap"
	"goods_srv/global"
	"net"
)

// GetFreePort 函数返回一个空闲的TCP端口，通过解析 localhost 上的 :0 端口并监听它来实现。
func GetFreePort() (int, error) {
	//解析localhost的tcp地址 端口为0
	addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
	if err != nil {
		zap.S().Panic(err)
	}
	//监听解析后的地址
	tcp, err := net.ListenTCP("tcp", addr)
	if err != nil {
		zap.S().Panic(err)
	}
	defer tcp.Close()
	//返回操作系统实际分配的端口号
	return tcp.Addr().(*net.TCPAddr).Port, nil
}

// InitFreePort 函数初始化全局服务器端口配置，如果未设置端口，则使用一个空闲的端口。
func InitFreePort() {
	//检查服务器端口号是否为0
	if global.AppConf.Port == 0 {
		port, err := GetFreePort()
		if err != nil {
			zap.S().Panic(err)
		}
		global.AppConf.Port = port
	}
}
